iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 12
0
自我挑戰組

你看微客=[ 前端領域 - 超入門 ]系列 第 12

HTML 5---[ API:Web Workers ]---無用小觀念

  • 分享至 

  • xImage
  •  

API:Web Workers

  • Javascript 受限於單一執行緒,若遇到高強度或複雜的程式碼計算,便會拖慢整體任務的執行進度並產生 slow script 的警告,解決的辦法就是利用 Web Workers 建立另外的執行緒,分擔處理較複雜部分的計算,確保瀏覽器與使用者的互動能夠正常無礙。
  • Web Workers 運作的程式碼將放在另外的 js 檔案,與主 js 分開獨立執行。(由主 js 檔來統整管理)
  • 可建立多個 Web Workers 執行緒協助運算,但並非無上限,建議最多 6 ~ 8 個
  • Web Workers 被限制不能存取網頁中的 DOM ,以免與主程式操作產生衝突。(僅讓一個執行緒來操作 DOM ,避免產生不可預期的結果)
  • 主 js 檔與 副 js 檔利用 postMessage 及 onmessage 方法來互相傳遞與接收訊息,訊息可為字串、陣列或物件(不可傳送函式),一般會將訊息包裹在一個 event 物件中,可利用其物件特性 data 及 target 來處理
    範例:
// main.js
var worker_1 = new Worker ("vice.js"); 
worker_1.postMessage("Wake up to work!");
worker_1.onmessage = function (event) {
     var messageFromWorker = event.data;
     var whoResponseMessage = event.target;
}
// 利用 Worker 建構式建立新 worker 物件,參照到 vice.js
// 利用 worker 物件的 postMessage 方法傳送訊息給 worker
// 利用 worker 物件的 onmessage 方法接收 worker 回傳的 event 物件
// event.data 為 worker 回傳的訊息內容
// event.target 則參照到發出訊息的 worker
-----------------------------------------------------
// vice.js
onmessage = function (event) {
     var messageFromMain = event.data; // "Wake up to work!"
     postMessage("I am ready!");
}
// 利用 onmessage 接收訊息
// 利用 postMessage 回傳訊息

  • 主 js 與 worker 互相傳送的物件是副本,因為兩者是在不同的執行環境
  • 在主 js 中呼叫 terminate 方法能刪除 worker 並釋放其記憶體空間,worker 本身亦可利用 close() 停止工作。

上一篇
HTML 5---[ API:Web Storage 瀏覽器儲存 ]---無用小觀念
下一篇
jQuery---[ 導入 ]---無用小觀念
系列文
你看微客=[ 前端領域 - 超入門 ]30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言